/*
 * Copyright (c) 2012 Aleksander Zotov, Benedikt Markt, Aliaksei Babkovich
 *
 * Permission is hereby granted, free of charge, to any person obtaining a copy
 *  of this software and associated documentation files (the "Software"),
 *  to deal in the Software without restriction, including without limitation
 *  the rights to use, copy, modify, merge, publish, distribute, sublicense,
 *  and/or sell copies of the Software, and to permit persons to whom the
 *  Software is furnished to do so, subject to the following conditions:
 *  
 *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
 *  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
 *  OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
 *  IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
 *  DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
 *  OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR
 *  THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 */

package gui;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import simulation.Simulation;
import simulation.SimulationManager;

/**
 * Table model for the list of simulations
 * 
 * CANT BE TESTED WITH JUNIT
 * 
 * @author Aleksander Zotov
 * 
 */
public class ListModel implements Serializable {

	private static final long serialVersionUID = 1L;

	private List<Simulation> simulations;

	private List<Simulation> filteredSimulations;

	private static Simulation selectedSimulation;

	public ListModel() {
		simulations = new ArrayList<Simulation>();
		populateList();
	}

	/**
	 * Loads the results of finished simulations from database and adds them to
	 * list model to be displayed in the dataTable
	 */
	public void populateList() {
		simulations = SimulationManager.getInstance().getSimulations();
	}

	public List<Simulation> getSimulations() {
		return simulations;
	}

	public Simulation getSelectedSimulation() {
		return selectedSimulation;
	}

	public void setSelectedSimulation(Simulation selectedSimulation) {
		this.selectedSimulation = selectedSimulation;
	}

	/**
	 * Returns selected simulation. This method is needed because
	 * getSelectedSimulation() can't be changed to static.
	 * 
	 * @return selected simulation
	 */
	public static Simulation getSelectedSimForPDF() {
		return selectedSimulation;
	}

	public List<Simulation> getFilteredSimulations() {
		return filteredSimulations;
	}

	public void setFilteredSimulations(List<Simulation> filteredSimulations) {
		this.filteredSimulations = filteredSimulations;
	}
}
